@Ineverleft
2年前 提问
1个回答

网络缓冲区溢出攻击的防范手段有哪些

安全侠
2年前

网络缓冲区溢出攻击的防范手段有以下这些:

  • 正确的编写代码:编写时重复地检查代码的漏洞可以使程序更加完美和安全。通常借助一些工具来帮助程序员编写安全正确的程序,避免源代码中对容易产生漏洞的函数库的调用,如对strcpy和sprintf的调用,这两个函数都没有检查输入参数的长度。或者避免使用查错工具,如fault injection等,通过人为随机地产生一些缓冲区溢出来寻找代码的安全漏洞。

  • 非执行的缓冲区:使缓冲区不可执行从而阻止攻击者植入攻击代码。但系统为了实现更好的性能和功能,往往在数据段中动态地放入可执行的代码。所以为了保持程序的兼容性不可能使得所有程序的数据段都不可执行。可以设定堆栈数据段不可执行,这样最大限度地保证了程序的兼容性。

  • 检查数组边界:利用编译器的边界检查来实现缓冲区的保护,保证数组不溢出。为了实现数组边界检查,对数组的所有的读写操作都应当被检查以确保对数组的操作在正确的范围内。

  • 程序指针完整性检查:程序指针完整性检查是在程序指针被引用之前检测到它的改变,即使有人改变了程序的指针,也会因为系统早先已经检测到了指针的改变而不会造成对指针的非法利用。

  • 使堆栈向高地址方向增长。使用的机器堆栈压入数据时向高地址方向前进,那么无论缓冲区如何溢出,都不可能覆盖低地址处的函数返回地址指针,也就避免了缓冲区溢出攻击。但是这种方法仍然无法防范利用堆和静态数据段的缓冲区进行溢出的攻击。